﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Net;
using System.IO;
using HigLabo.Net;

namespace HigLabo.WindowsAzure.RestService.SqlAzureManagement
{
    /// <summary>
    /// Windows Azure SQL Database Management APIを操作するコマンドのインターフェースです
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public abstract class SqlAzureManagementServiceCommand<T> where T : SqlAzureManagementServiceResult
    {
        /// <summary>
        /// 操作名称及び、API操作に必要なクエリ文字列を含んだ文字列を返します。
        /// [https://management.database.windows.net:8443/{SubscriptionID}/servers/]以下の文字列を返して下さい。
        /// </summary>
        public abstract String GetRequestUri();
        /// <summary>
        /// リクエストのメソッド名を返して下さい。
        /// </summary>
        public abstract HttpMethodName MethodName { get; }
        /// <summary>
        /// ContentType
        /// 必要な場合にoverrideしてください。
        /// 既定値はnullです。
        /// </summary>
        public virtual String ContentType { get { return ""; } }
        /// <summary>
        /// リクエストヘッダに埋め込むパラメータを返してください。
        /// 不要な場合は、nullを返して下さい。
        /// </summary>
        /// <returns></returns>
        public abstract Dictionary<String,String> GetRequestHeaders();
        /// <summary>
        /// リクエストのBodyに埋め込む情報を取得するストリームを返してください。
        /// 不要な場合は、nullを返して下さい。
        /// </summary>
        /// <returns></returns>
        public abstract Stream GetRequestBodyStream();
        /// <summary>
        /// 
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        protected MemoryStream GetStream(String text)
        {
            return new MemoryStream(Encoding.UTF8.GetBytes(text));
        }
    }
}
